Computer programming has been accomplished in a variety of fashions since the development of computers and computer software. Early programming techniques involved physical manipulation of computing architecture (e.g., tube and transistors). However, as data storage media became more advanced, it became possible to re-use one program for many things according to the content of the memory. A person would spend quite some time making punch cards that would hold a list of instructions for a computer. Every model of computer would be likely to need different instructions to do the same task. As computers became more powerful, and storage media became re-usable, it became possible to use the computer to make the program. Programmers quickly began to favor text over 1s and 0s, and punch cards were phased out. Over time and especially thanks to the manufacture and the development of integrated circuits, computers have become extremely powerful, and this has resulted in a branch of programming called scripting. Programming has become gradually easier as new languages are developed. Even to the point where lay people have been able to create their own scripts and/or macros.
Macros are generally an abstraction, whereby a certain textual pattern is replaced according to a defined set of rules. An interpreter or compiler automatically replaces the pattern when it is encountered. The term macro is used in many similar contexts which are derived from the concept of macro-expansion, including keyboard macros and macro languages. In most situations, the use of the word “macro” implies expanding a small command or action into a larger set of instructions.
Along with programming, speech recognition has developed concurrently with the development of computing systems. Speech recognition (in many contexts, also known as automatic speech recognition, computer speech recognition or voice recognition) technologies generally represent a set of technology that allows computers equipped with a source of sound input, such as a microphone, to transform human speech to a sequence of words. Applications of speech recognition include transcription and as an alternative method of interacting with a computer.
Some speech recognition systems allow for macros to be programmed and then activated by a voice command. FIG. 1 illustrates a prior art macro environment for the programming of macros that will be voice activated. Included in FIG. 1 are a command browser 110 having a list of commands 160 conforming to a command type 150. In the example command browser 110, the listed commands 160 are all global commands. The command browser also includes a button for creating a new command 155. The new command button activates a command editor 115 where a new command may be entered. The new command editor 115 includes text input fields for a command name 120 and description 125. Also included in the command editor 115 is a button to train 130 a command name for voice activation in a speech recognition system (not shown). The command editor 115 also includes command type selection 135 with the “global” type shown as being selected. An additional command type is shown in selection box 140 indicating that it is text and graphics type of command. In the command work space 145 a user may type in the programming instructions for the new command. Also shown in FIG. 1 is a voice recognition tool bar 105 shown attached to the command editor 115. The voice recognition tool bar 105 is used to control voice recognition activity in a currently active application in a computing system.
While the above-described command editing environment does allow a user to create (and edit) new commands for use in a voice recognition system, it is not designed for voice entry of the instructions that make up a macro and/or program activated by a command.
While voice recognition systems are designed to assist those for whom typing is not a preferred entry method, paradoxically the most avid users of those are most likely to desire and develop customized voice commands. Simple instructions such as adding a new word or a shortcut for a block of text are easy to use and program in conventional systems such as those shown in FIG. 1. However, programming instructions with all their complex syntax is cumbersome when each element has to be dictated, sometimes character by character. For example, FIG. 1 has a command browser 110 and a command editor 115, but the programming environment is optimized for typed input, not for voice input. For example dictating the following program named “PrintDoc”:                SendKeys ({Ctrl+p})        Wait 500        ControlPick “okay”        
Would require approximately 3 minutes to enter a name for the program including proper capitalizations and then move the text down and enter the information in its proper order sometimes character by character and including a probable correction of the term “Wait 500” which would probably be spelled weight instead of wait.